ERP俱乐部
ERP爱好者、ERP从业者互相交流、互相学习的乐园;我们的愿景是成为全球一流的中文ERP(Enterprise Resource Planning)交流平台
网站首页 论坛首页 搜索 用户列表 FAQ 注册 登录  
ERP俱乐部 -> SAP专栏 -> ABAP -> ABAP常用字符串操作收集整理
  ABAP常用字符串操作收集整理
帖子发起人: 欧阳可   发起时间: 2013-08-23 11:51 上午   回复数: 0
? 上一主题 下一主题 ?
楼主
  2013-08-23, 11:51 上午
欧阳可 离线,最后访问时间: 2014/6/6 11:59:33 欧阳可

发帖数前150位

50级
等级: 50级
注册: 2013年7月8日
经验: 315
积分: 315
精华: 0
发贴: 128
排名: 79
Site Registered Users
ABAP常用字符串操作收集整理
 

字符串首字符索引为 0; Character Fields: C,N, D, T, string (CNDT=> CN Data Time)

1. 字符串连接





  1. CONCATENATE dobj1 dobj2 ...  INTO result

  2.             [IN { BYTE | CHARACTER } MODE]

  3.             [SEPARATED BY sep].



复制代码

2.字符串分隔, split 一个string的部分到一个内表或一系列的变量





  1. SPLIT dobj AT sep INTO

  2.       { {result1 result2 ...} | {TABLE result_tab} }

  3.       [IN {BYTE|CHARACTER} MODE].



复制代码

3. 字符串查找, 在一个字符串中查找模式串(FIND or SEARCH)





  1. FIND sub_string

  2.   IN SECTION [OFFSET off] [LENGTH len] OF dobj   --> 灰色部分用来缩小目的串被查找的范围

  3.   [ IN { BYTE | CHARACTER } MODE ]

  4.   [ { RESPECTING | IGNORING } CASE ]

  5.   [ MATCH OFFSET moff ] [MATCH LENGTH mlen ].

  6. FIND 'knows'

  7.     IN SECTION OFFSET 5 OF  'Everybody knows this is nowhere'

  8.     MATCH OFFSET moff   "  => moff = 10

  9.     MATCH LENGTH mlen. " => mlen= 5



复制代码

在字符串dobj中查找pattern





  1. SEARCH dobj FOR pattern  [IN { BYTE | CHARACTER } MODE]

  2.        [STARTING AT p1] [ENDING AT p2]

  3.        [ABBREVIATED]

  4.        [AND MARK].



复制代码

if sy-subrc = 0. then SY-FDPOS = 返回pattern在dobj中的位置

About pattern:

'pat'   - 忽略尾部空格

'.pat.' -不忽略尾部空格

'*pat' - 以pat结尾

'pat*' - 以pat开始

单词是指: 用 空格 , ; : ? ! () / + =分隔的字串





4. 字符串替换





  1. REPLACE SECTION [OFFSET off] [LENGTH len]

  2.         OF dobj WITH new

  3.         [IN { BYTE | CHARACTER } MODE].

  4. REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF]

  5.         [SUBSTRING] sub_string

  6.         IN [SECTION [OFFSET off] [LENGTH len] OF ] dobj WITH new

  7.         [IN {BYTE|CHARACTER} MODE]

  8.         [{RESPECTING|IGNORING} CASE]

  9.         [REPLACEMENT COUNT rcnt]

  10.         [REPLACEMENT OFFSET roff]

  11.         [REPLACEMENT LENGTH rlen].



复制代码

eg:

DATA: text1 TYPE string VALUE 'xababx'.

REPLACE 'ab' IN text1 WITH 'xx'. --> xxxabx





5. 去前导0 (Remove leading zero)

SHIFT dobj LEFT DELETING LEADING '0'.

FM : CONVERSION_EXIT_ALPHA_OUTPUT

增前导0 (Add leading zero)

DATA v_s(5).

UNPACK '123' to v_s.  ==> v_s = '00123'

FM: CONVERSION_EXIT_ALPHA_INPUT





  1. SHIFT dobj

  2.      [{BY num PLACES} | {UP TO sub_string}]

  3.      [LEFT|RIGHT] [CIRCULAR]

  4. SHIFT dobj

  5.      {LEFT  DELETING LEADING} | {RIGHT DELETING TRAILING} pattern.

  6.      [IN {BYTE|CHARACTER} MODE].



复制代码

6. 字符串的长度, 内表的行数

STRLEN( dobj) 字符串的长度

LINES( itab ) 内表的行数



7. 删字符串中的空格: CONDENSE text [NO-GAPS].



8. 大小写转换,字符变换

TRANSLATE text {TO {UPPER|LOWER} CASE} | {USING pattern}.

eg: text = `Barbcbdbarb`.

TRANSLATE text USING 'ABBAabba'. =>'Abracadabra'



9. CONVERT





  1. CONVERT DATE dat [TIME tim [DAYLIGHT SAVING TIME dst]]

  2.         INTO TIME STAMP time_stamp TIME ZONE tz.

  3. CONVERT TIME STAMP time_stamp TIME ZONE tz

  4.         INTO [DATE dat] [TIME tim]

  5.         [DAYLIGHT SAVING TIME dst].

  6. CONVERT TEXT text INTO SORTABLE CODE hex.



复制代码

10. OVERLAY text1 WITH text2 [ONLY pattern].

如果不指定后面的ONLY pattern, text1中的空格会被text2中的对应字符替代

如果指定只有匹配的字符才会被替代,注意大小写敏感



11. 模式匹配

CO / CN contains only or not

CA / NA contains any or not any

CS / NS contain string or not

CP / NP contains pattern or not

NOTE:

a) . CO, NO, CA, NA比较时区分大小写, 并且尾部空格也在比较的范围之内

data: s1(10) value 'aabb'.

if s1 co 'ab' ==> false

if s1 co 'ab ' ==>true

CS, NS, CP, NP不区分大小写和尾部空格

b) .对于CP, NP

*   = s?

+ = s

# 换码字符, 用于匹配 *, +这样的字符

      ##

      #*

      #+

      #___   比较结尾空格

      #[a-z] 在CP, NP中强制区分大小写

c) . 比较结束后,如果结果为真,sy-fdpos将给出s2在s1中的偏移量信息



12. 特殊字符

在字符串中加入回车换行或TAB字符,在其他语言可以使用$13$10这样的ASCII码进行插入.但在ABAP中要使用sap的类CL_ABAP_CHAR_UTILITIES. 里面有字符常量:CR_LF,HORIZONTAL_TAB,NEWLINE等等.



13. 字符串位操作

DATA: v_s(10) value 'abcd'.

v_s+0(1) = 'b'.

v_s+2(*) = '12'.

=> v_s = 'bb12'. 


Ke.ouyang
ERP/SAPCLUB 亚可公司
tel:0755-26523860; 18038036868
email: ke.ouyang@yok.com.cn info@yok.com.cn
MSN:yoksaphunter@hotmail.com
请关注亚可官方微博:
亚可YOK 、sapclub
QQ:819470295

分享按钮 IP 地址: 已登录   来自: 已登录    返回顶部
 第 1 页 总共 1 页 [共有 1 条记录]
ERP俱乐部 -> SAP专栏 -> ABAP -> ABAP常用字符串操作收集整理
(C)Copyright 2005-2020 www.erpclub.org All Rights Reserved.
Tel:+86-755-26444630
Email:webmaster@yok.com.cn